<?php
/**
 * Offre les objets codant un tableau html
 */


/**
 * Implemente une cellule de tableau
 */
class BphTCell extends BphItemBox{
	public $rowspan;
	public $colspan;
	
	function __Construct($pcells = 'td') {
		parent::__Construct($pcells);
		$this->rowspan = '';
		$this->colspan = '';
	}
	
	/**
	 * Renvoie le code du tableau
	 */
	function Code ($level=0) {
		if ( $this->rowspan ){
			$this->AddAttribut( 'rowspan', $this->rowspan);
		}
		if ( $this->colspan ){
			$this->AddAttribut( 'colspan', $this->colspan);
		}
		return parent::Code($level);
	}
}//class BphTCell


/**
 * Implemente une ligne de tableau
 */
class BphTRow extends BphItemBox{
	/**
	 * nom des balises des cellules (td, th)
	 */
	protected $cells;
	
	/**
	 * Constructeur
	 */
	function __Construct ($pcells = 'td') {
		$this->cells = $pcells;
		parent::__Construct('tr');
	}
	
	/**
	 * Crée une cellule, y ajoute les arguments eventuels et la renvoie
	 */
	function AddTd (){
		$td = new BphTCell($this->cells);
		$td->AddItems (func_get_args());
		$this->AddItems ($td);
		return $td;
	}
}//class BphTRow


/**
 * Implemente un tableau
 */
class BphTable extends BphItemBox{
	/**
	 * string: Legende du tableau
	 */
	public $caption;
	
	/**
	 * BphTRow: Entete du tableau
	 */
	public $head;
	
	/**
	 * BphTRow: Pied du tableau
	 */
	public $foot;
	
	/**
	 * Array: Lignes du tableau
	 */
	protected $_rows = Array();
	
	/**
	 * Constructeur
	 */
	function __Construct () {
		parent::__Construct('table');
		$this->head = new BphTRow('th');
		$this->foot = new BphTRow('th');
		$this->_rows = Array();
	}
	
	/**
	 * Ajout et renvoi d'une ligne vierge
	 */
	function AddTr (){
		$t = new BphTRow();
		$this->_rows[] = $t;
		return $t;
	}

	/**
	 * Renvoie le code du tableau
	 */
	function Code ($level=0) {
		// Ajout de la legende
		if ($this->caption){
			$this->AddItems(new BphItemBox('caption', $this->caption));
		}
		// Ajout de l'entete
		if ( $this->head->NumItems()>0 ){
			$head = new BphItemBox('thead');
			$head->AddItems($this->head);
			$this->AddItems($head);
		}
		// Ajout du pied
		if ( $this->foot->NumItems()>0 ){
			$foot = new BphItemBox('tfoot');
			$foot->AddItems($this->foot);
			$this->AddItems($foot);
		}
		// Ajout des lignes
		$body = new BphItemBox('tbody');
		$body->AddItems($this->_rows);
		$this->AddItems($body);
		return parent::Code($level);
	}
}
?>
